package com.captain.leetcode.动态规划;

/**
 * Des:
 *
 * @author XL
 * @Date 2022/1/7 17:26
 */
public class 最长重复子数组718 {

    /**
     * des:
     * 集合一和集合二的最长子数组
     *
     * @param nums1 集合一 5
     * @param nums2 集合二 5
     * @return {@link int }
     * @author captain
     * @date 2022/1/7 17:26
     */
    public int findLength(int[] nums1, int[] nums2) {
        int len1 = nums1.length;
        int len2 = nums2.length;
        int[][] dp = new int[len1 + 1][len2 + 1];
        int res = 0;
        //dp[i][j] ：以下标i - 1为结尾的A，和以下标j - 1为结尾的B，最长重复子数组长度为dp[i][j]
        for (int i = 1; i <= len1; i++) {
            for (int j = 1; j <= len2; j++) {
                //比较当前的数组的值
                if (nums1[i - 1] == nums2[j - 1]) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }
                if (res < dp[i][j]) res = dp[i][j];
            }
        }
        return res;
    }
}
